# 批量给文件重命名

import os
import sys


def batch_rename(folder_path, prefix):
    """
    批量重命名文件夹中的文件为：前缀_序号.扩展名

    :param folder_path: 文件夹路径
    :param prefix: 文件前缀
    """
    try:
        # 检查文件夹是否存在
        if not os.path.exists(folder_path):
            raise FileNotFoundError(f"文件夹不存在: {folder_path}")
        if not os.path.isdir(folder_path):
            raise NotADirectoryError(f"路径不是文件夹: {folder_path}")

        # 获取文件夹中的所有文件（排除目录）
        files = [f for f in os.listdir(folder_path)
                 if os.path.isfile(os.path.join(folder_path, f))]

        # 按文件名排序，确保有序重命名
        files.sort()

        if not files:
            print("警告: 文件夹中没有文件")
            return

        print(f"将在文件夹中找到 {len(files)} 个文件:")
        print("-" * 40)

        # 记录重命名结果
        renamed = []
        skipped = []

        # 重命名每个文件
        for i, filename in enumerate(files, start=1):
            # 分离文件名和扩展名
            base, ext = os.path.splitext(filename)

            # 构建新文件名
            new_name = f"{prefix}_{i}{ext}"

            # 原始文件的完整路径
            old_path = os.path.join(folder_path, filename)
            # 新文件的完整路径
            new_path = os.path.join(folder_path, new_name)

            # 检查新文件名是否已存在（在另一个文件上）
            if os.path.exists(new_path) and old_path != new_path:
                print(f"! 跳过 {filename} -> {new_name} (目标文件已存在)")
                skipped.append(filename)
                continue

            try:
                # 执行重命名
                os.rename(old_path, new_path)
                print(f"✓ 已重命名: {filename} -> {new_name}")
                renamed.append((filename, new_name))
            except Exception as e:
                print(f"× 重命名失败: {filename} -> {new_name} ({str(e)})")
                skipped.append(filename)

        # 显示结果总结
        print("\n" + "=" * 40)
        print(f"批量重命名完成！")
        print(f"成功重命名: {len(renamed)} 个文件")
        print(f"跳过: {len(skipped)} 个文件")

        if renamed:
            print("\n重命名列表:")
            for i, (old, new) in enumerate(renamed, start=1):
                print(f"  {old} → {new}")

    except Exception as e:
        print(f"发生错误: {str(e)}")
        sys.exit(1)


if __name__ == "__main__":
    # 指定参数
    batch_rename("E:\\img", "P3")